<?php

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

// get请求路由
Route::get('/', function () {

    return view('welcome');
});

// post请求
Route::post("hello",function(){

    return "<h1>Hello word</h1>";
});
// 多请求路由
Route::match(["get","pot"],"matchtest",function(){

    return "<h1>Hello word</h1>";
});
// 任意路由
Route::any("hello2",function(){

    return "<h1>Hello word</h1>";
});

// restfull
// 路由参数,绑定路由参数进回调方法参数中
Route::get("restfull/{id}",function($id2){

    return "<h1>Hello restfull".$id2."</h1>";

});
// restfull设置路由参数是可选可不选，在路由参数最后添加问号即可
//设置问号以后再访问的时候可以给回调函数增加默认值，路径没有参数的时候可以使用默认值，有值得时候参数默认值被替换
Route::get("restfull2/{id?}",function($id2="qwqw"){

    return "<h1>Hello restfull".$id2."</h1>";
// 在后面可以添加where关键字，使用正则表达式限定路由参数应该传递什么样的值
})->where("id","[A-Za-z]+");

// 路有参数可以设置多个
Route::get("restfull3/{id?}/{name?}",function($id2="1011",$name="name"){

    return "<h1>Hello ".$id2."restfull".$name."</h1>";

// 在后面可以添加where关键字，使用正则表达式限定路由参数应该传递什么样的值
//可以根据路由参数的不同设置多个限定路由参数的规则
})->where(["id2"=>"[0-9]+","name"=>"[A-Za-z]+"]);


// 路由别名
Route::get("user/test",["as"=>"center",function(){

    // 使用route函数传一个路由别名参数，在路由中寻找与此别名对上的路由地址
    // route函数就会找到下面以center2为别名的路径
    return route("center2");
}]);
Route::get("user/test444",["as"=>"center2",function(){

    return route("memberinfo");
}]);


// 设置路由群组
// 访问如下路由时都要加上设置好的前缀
Route::group(["prefix"=>"laravel"],function(){

    // get请求路由
    Route::get('hello5', function () {

        return view('welcome');
    });

    // 任意路由
    Route::any("hello2",function(){

        return "<h1>Hello word</h1>";
    });
});


// 路由与控制器进行关联,第二个参数写类名@方法名
// 第一钟方法
Route::get("memberController","MemberController@echoView");
//CRUD
Route::get("UserController/{id?}",[
    "uses"=>"UserController@testDelete"
]);

// 第二种方法
Route::get("memberController2",["uses"=>"MemberController@info2"]);
// 给路由设置别名
Route::get("memberController3",[
    //绑定控制层
    "uses"=>"MemberController@info",
    //顺带取别名
    'as'=>'memberinfo'
]);

// 路由绑定参数，再传到绑定的控制层方法中的形参当中
Route::get("memberController4/{id}",[

    "uses"=>"MemberController@info2",
     "as"=>"restfull"
]);

// 输出视图的方法
Route::get("echoView",[

    //一般member控制器，视图都放在视图中的member目录中
    "uses"=>"MemberController@echoView"
]);

// 查询构造器
Route::get("queryConstruController/{id?}",[
    "uses"=>"queryConstruController@query5"
]);
// orm测试
Route::get("OrmTestController/{id?}",[
    "uses"=>"OrmTestController@ormInsert"
]);

// blade文件测试
Route::get("bladeController",[
    "uses"=>"bladeController@testView"
]);
Route::get("bladeUrl",[
    "as"=>"Url",
    "uses"=>"bladeController@testUrl"
]);

// request测试
Route::any("requestController",[
    "uses"=>"requestController@requestTest"
]);

// 将使用session的控制器方法放入开启web中间件的路由群组中
// 群组加入要使用的中间件都是以middleware为数组下标，指向中间件的名的数组，因为可以用很多中间件
// 群组第一个数组参数处理声明中间件外，还能声明前缀
Route::group(["middleware"=>["web"]],function(){
    Route::any("requestSession1",["uses"=>"requestController@session1"]);
    Route::any("requestSession2",["uses"=>"requestController@session2"]);
    // 测试文件上传
    Route::any("requestUploads",["uses"=>"requestController@uploads"]);
    // 测试发送邮件
    Route::any("sendMail",["uses"=>"requestController@sendMail"]);
    // 测试缓存
    Route::any("cache1",["uses"=>"requestController@cache1"]);
    Route::any("cache2",["uses"=>"requestController@cache2"]);
    // 测试log
    Route::any("testLog",["uses"=>"requestController@testLog"]);
    // queue测试队列
    Route::any("queue",["uses"=>"requestController@queue"]);

    // 测试response
    Route::any("responseController",["uses"=>"responseController@testResponse"]);
});

// 中间件测试
// 活动宣传页面
Route::any("activity0",[
    "uses"=>"responseController@activity0"
]);
// 给需要验证活动时间的路由，都加入含有验证活动时间的路由组当中
Route::group(["middleware"=>"activity0"],function(){

    // 以下为需要验证活动时间的一些路由
    Route::any("activity1",[
        "uses"=>"responseController@activity1"
    ]);
    Route::any("activity2",[
        "uses"=>"responseController@activity2"
    ]);
});
// 给路由群组都设置检查登录检查中间件，
// 并且传入参数，userLogin路由不使用中间件验证登录
// 同时因为给该中间件传递了参，所以需要在自定义中间件的handle方法中设置第三个参数用来接收此参数
Route::group(["middleware"=>["web","CheckLogin:userLogin"]],function(){
    // 登录路由
    Route::any("userLogin",[
        "uses"=>"userAdminController@loginIndex",
        "as"=>"userLogin"
    ]);
    // 登录请求路由
    Route::any("userLoginForm",[
        "uses"=>"userAdminController@login",
        "as"=>"userLoginForm"
    ]);
    // 主页路由
    Route::any("userindex",[
        "uses"=>"userAdminController@index",
        "as"=>"userindex"
    ]);
    // 新增页面路由
    Route::any("usercreate",[
        "uses"=>"userAdminController@create"
    ]);
    // 新增路由
    Route::any("user/save",[
        "uses"=>"userAdminController@save"
    ]);
    // 更新路由
    Route::any("update/{id?}",[
        "uses"=>"userAdminController@update"
    ]);
    // 删除路由
    Route::any("delete/{id?}",[
        "uses"=>"userAdminController@delete"
    ]);
    // 细节路由
    Route::any("detail/{id?}",[
        "uses"=>"userAdminController@detail"
    ]);
    // 退出路由
    Route::get("userLogOut",[
        "uses"=>"userAdminController@logOut",
        "as"=>"userLogOut"
    ]);
});

// 连表查询
// 一对一查询
Route::any("hasOne",[
    "uses"=>"lianbiaoController@hasOne",
    "as"=>"hasOne"
]);
// 一对多查询
Route::any("hasMany",[
    "uses"=>"lianbiaoController@hasMany",
    "as"=>"hasMany"
]);

// 多对多查询
Route::any("beLongsToMany",[
    "uses"=>"lianbiaoController@beLongsToMany",
    "as"=>"beLongsToMany"
]);


Auth::routes();

Route::get('/home', 'HomeController@index')->name('home');

